////////////////////////////////////////
//	File Header
//	Author: Stephen Ringer | stephen.ringer@gmail.com
//	File: SAGAMCFree.cpp
//
////////////////////////////////////////

////////////////////////////////////////
//	File Includes
#include "SAGAGeneral.h"
//
////////////////////////////////////////

////////////////////////////////////////
//	Function Name: SAGAMCFree
//	Purpose:
//		Just initialize some values.
SAGAMCFree::SAGAMCFree() 
{
	SAGAMovementController::Init();
} 
//
////////////////////////////////////////

////////////////////////////////////////
//	Function Name: ~SAGAMCFree
//	Purpose:
//		Just some destruction work
SAGAMCFree::~SAGAMCFree() 
{

} 
//
////////////////////////////////////////

////////////////////////////////////////
//	Function Name: SetRotation
//	Purpose:
//		Set rotation values and recalculate local vectors.
void SAGAMCFree::SetRotation(float rx, float ry, float rz) 
{
	m_fRotX = rx;
	m_fRotY = ry;
	m_fRotZ = rz;

	RecalcAxes();
} 
//
////////////////////////////////////////

////////////////////////////////////////
//	Function Name: AddRotationSpeed
//	Purpose:
//		add speed to the rotation around the axes
void SAGAMCFree::AddRotationSpeed(float sx, float sy, float sz) 
{ 
	m_fPitchSpd += sx; 
	m_fYawSpd   += sy;
	m_fRollSpd  += sz;
} 
//
////////////////////////////////////////

////////////////////////////////////////
//	Function Name: SetRotationSpeed
//	Purpose:
//		set the rotation speed around the axes to this values
void SAGAMCFree::SetRotationSpeed(float sx, float sy, float sz) 
{ 
	m_fPitchSpd = sx; 
	m_fYawSpd   = sy;
	m_fRollSpd  = sz;
} 
//
////////////////////////////////////////

////////////////////////////////////////
//	Function Name: Update
//	Purpose:
//		Calculate movement based on behavior model and attribute values.
//		Input parameter is elapsed time since last frame.
void SAGAMCFree::Update(float fET) 
{
	// add rotation speed
	m_fRotX = (m_fPitchSpd * fET);
	m_fRotY = (m_fYawSpd   * fET);
	m_fRotZ = (m_fRollSpd  * fET);

	// calculate velocity vector
	m_vcV = m_vcDir * m_fThrust * fET;

	// move position according to velocity vector
	m_vcPos += m_vcV;

	// recalculate axes
	RecalcAxes();
} 
//
////////////////////////////////////////
